<?php
Vendor('phpExcel.PHPExcel');
Vendor('phpExcel.PHPExcel.Writer.Excel2007');
/**
 * 项目函数库
 * @todo BMP项目自定义函数
 */

/**
 * 将数据导出成Excel
 * 返回生成Excel后的地址
 * @param string $sFileName 欲保存的文件前缀名，系统会自动加上当前时间
 * @param array $arrData 传递的数据，格式如下
 * $arrData = array(
 * 		'title' => array(
 * 				'key1' => 'title1',
 * 				'key2' => 'title2',
 * 				'key3' => 'title3',
 * 		),
 * 		'values' =>array(
 * 				array(
 * 					'key1' => 'value1',
 * 					'key2' => 'value2',
 * 					'key3' => 'value3',
 * 				),
 * 				array(
 * 					'key1' => 'value1',
 * 					'key2' => 'value2',
 * 					'key3' => 'value3',
 * 				)
 * 		)
 * )
 */
function saveToExcel($sFileName = '', $arrData = NULL){
	//判断数组有效性
	if(!$arrData)
		return C('ERROR_EXCEL_WRONG_DATA');
	
	if(!is_array($arrData))
		return C('ERROR_EXCEL_WRONG_DATA');
		
	//初始化PHPExcel对象
	$objExcel = new PHPExcel();
	$objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用于2007 格式
	
	$objExcel->setActiveSheetIndex(0);
	$objActSheet = $objExcel->getActiveSheet();
	
	//获取标题数据
	$arrTitle = $arrData['title'];
	$arrSettleTitle = array();
	$i = 65;
	foreach($arrTitle as $sTitle => $sTitleValue){
		//如果超过26列，则退出循环，暂不支持，后续扩充
		if($i > 90)
			return C('ERROR_EXCEL_OVERFLOW_COLUMN');
			
		//记录各Title对应的列序号
		$arrSettleTitle[$sTitle] = chr($i);
		$objActSheet->setCellValue(chr($i).'1', $sTitleValue);
		$i++;
	}
	
	//获取值数据
	$arrValues = $arrData['values'];
	//第一行留给标题，从第二行开始写数据
	$j = 2; 
	foreach($arrValues as $arrValue){
		//校验行数据有效性
		if(!is_array($arrValue))
			continue;
			
		//根据Key获取所对应的列序号，与行号组合成单元格地址，然后把值写入
		foreach ($arrValue as $key => $value){
			if(array_key_exists($key, $arrSettleTitle)){
				$objActSheet->setCellValue($arrSettleTitle[$key].$j, $value);
			}		
		}
		$j++;
	}
	
	//导出的文件名
	$outputFileName = iconv('UTF-8', 'gb2312', $sFileName. time().'.xlsx');
	
	//构建头文件，直接跳转用户浏览器下载
	header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="'.$outputFileName.'"');
    header('Cache-Control: max-age=0');
    		
    //将对应的数据直接输出
    $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
    $objWriter->save('php://output');
	
	exit;
}
//支付宝退款接口
/*
$orderCount为传入的需要退款的订单数量,总数一定要不大于1000；
$orderDetail为传入订单的详细信息,为一个数组集array(array('0'=>'2011011201037066','1'=>'5.00','2'=>'协商退款'),array('0'=>'2011011201037066','1'=>'5.00','2'=>'协商退款')……)
@return $html_text为支付宝返回的处理结果集
*/
function refundAlipayApi($orderDetail){
		/*
		统计传入订单详情的总数$orderCount
		对传入的订单数据$orderDetail进行拆分,并进行拼接格式为2011011201037066^5.00^协商退款#2011011201037066^5.00^协商退款#2011011201037066^5.00^协商退款……
		*/
		$orderCount=count($orderDetail);
		$linkDetails='';
		foreach($orderDetail as $orderDetails){
			$linkDetails.=$orderDetails[0].'^'.$orderDetails[1].'^'.$orderDetails[2].'#';//将所有的数据进行拼接
			//return $linkDetails;
		}
		$linkDetails=substr($linkDetails,0,strlen($linkDetails)-1);//去除字符串最后一个‘#’号
		//print_r($linkDetails);die();
		/*
		判断传入的订单总数小于1000笔
		*/
		if($orderCount>1000){
			echo "总笔数大于1000！";
			return false;
		}else{
			/*
			引入需要用到的API文件,配置文件和数据远程提交文件
			*/
			$root=dirname(dirname(__FILE__));
			require_once($root."/Api/alipay.config.php");
			require_once($root."/Api/lib/alipay_submit.class.php");
			/*
			服务器异步通知页面路径,需http://格式的完整路径，不允许加?id=123这类自定义参数,不返回数据时可以为空,下面这个是测试地址,当正式用到时换成正式地址
			*/
			$notify_url = "http://127.0.0.1/index.php/Alipay/notify_url";
			//卖家支付宝帐户
			$seller_email = "2355572900@qq.com";
			//退款当天日期 ,必填,格式：年[4位]-月[2位]-日[2位] 小时[2位 24小时制]:分[2位]:秒[2位]，如：2007-10-01 13:13:13
			$refund_date = date('Y-m-d H:i:s',time());
			//批次号,必填,格式：当天日期[8位]+序列号[3至24位]，如：201008010000001
			$batch_no = date('Ymd',time())."00".date('His',time());        
			//退款笔数
			$batch_num = $orderCount;
			$detail_data = $linkDetails;//退款详细数据
			//构造要请求的参数数组
			$parameter = array(
				"service" => "refund_fastpay_by_platform_pwd",
				"partner" => trim($alipay_config['partner']),
				"notify_url"	=> $notify_url,
				"seller_email"	=> $seller_email,
				"refund_date"	=> $refund_date,
				"batch_no"	=> $batch_no,
				"batch_num"	=> $batch_num,
				"detail_data"	=> $detail_data,
				"_input_charset"	=> trim(strtolower($alipay_config['input_charset']))
			);
			$alipaySubmit = new AlipaySubmit($alipay_config);//创建一个新的请求
			$html_text = $alipaySubmit->buildRequestForm($parameter,POST,"确认");//建立远程POST请求
			return $html_text;
		}
}


?>